﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Comissoes.Utilities;

namespace Comissoes.Models
{
    public class LacresModel
    {
        public LACRES lacre { get; set; }
        xcontEntities db = new xcontEntities();
        List<string> erros;

        public LacresModel()
        {
            LACRES lacre = new LACRES(); 

            this.lacre = lacre;
        }

        public LacresModel(Int32? id)
        {
            this.lacre = db.LACRES.FirstOrDefault(t => t.ID_LACRE == id);
        }

        public List<string> UpdateValidate(FormCollection form)
        {
            this.erros = new List<string>();
            String NUMERO_LACRE = form["NUMERO_LACRE"];

            if (string.IsNullOrEmpty(form["ID_VOL"]))
            {
                erros.Add("É necessário cadastrar o volume antes.");
            }

            if (string.IsNullOrEmpty(NUMERO_LACRE))
            {
                erros.Add("É necessário informar o número do lacre.");
            }

            else if (db.LACRES.Any(t => t.NUMERO_LACRE == form["NUMERO_LACRE"] && t.VOLUMES.ID_VOL == this.lacre.VOLUMES.ID_VOL))
            {
                erros.Add("Já existe um lacre cadastrado neste volume com este número no momento.");
            }

            return erros;
        }

        public List<string> Update(FormCollection form)
        {
            this.erros = new List<string>();

            try
            {
                if (db.LACRES.Any(t => t.ID_LACRE == this.lacre.ID_LACRE))
                {
                    this.lacre = db.LACRES.FirstOrDefault(t => t.ID_LACRE == this.lacre.ID_LACRE);
                }
                
                else
                {
                    Int32? ID_VOL = Convertions.Inteiro(form["ID_VOL"]);

                    this.lacre.VOLUMES = db.VOLUMES.FirstOrDefault(t => t.ID_VOL == ID_VOL);

                    db.AddToLACRES(this.lacre);
                }

                this.lacre.NUMERO_LACRE = form["NUMERO_LACRE"];

                db.SaveChanges();
            }
            catch (Exception ex)
            {
                erros.Add(ex.Message);
                
                if (ex.InnerException != null)
                {
                    erros.Add(ex.InnerException.Message);
                }
            }

            return erros;
        }

        public List<string> Delete()
        {
            this.erros = new List<string>();

            if (!erros.Any())
            {
                try
                {
                    db.DeleteObject(db.LACRES.FirstOrDefault(t => t.ID_LACRE == this.lacre.ID_LACRE));
                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                    erros.Add(ex.Message);
                }
            }

            return erros;
        }
    }
}
